package javaer.starter.core.handler;

import javaer.starter.base.domain.dto.DependencyDTO;
import javaer.starter.base.domain.dto.PomParent;
import lombok.AccessLevel;
import lombok.Data;
import lombok.experimental.FieldDefaults;

import java.io.Serializable;
import java.nio.file.Path;
import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * 渲染模块的上下文
 *
 * @author yangzhen
 * @date 2023/6/12 15:55
 * @since 1.0.0
 */
@Data
@FieldDefaults(level = AccessLevel.PRIVATE)
public class ModuleContext implements Serializable {

    PomParent parent;
    /**
     * 最外层pom
     */
    Boolean imRootPom;
    /**
     * 是否启动项
     */
    Boolean imStarterPom;
    /**
     * 脚手架类型唯一标识
     */
    String typeId;
    /**
     * typeId的小写
     */
    String typeName;
    /**
     * 模块的唯一标识
     */
    String moduleId;
    /**
     * 模块唯一标识小写
     */
    String moduleName;
    /**
     * 组id
     */
    String groupId;
    /**
     * 模块名称
     * 如：java-starter
     */
    String artifactId;
    /**
     * artifactId的驼峰
     */
    String artifactIdHump;
    /**
     * 版本号
     */
    String version;
    /**
     * 基础包名
     * 如：javaer.starter
     */
    String basePackage;
    /**
     * javaer/starter
     */
    Path basePackagePath;
    /**
     * 模块的artifactId
     * javaer-starter
     */
    String moduleArtifactId;
    /**
     * 模块的artifactId驼峰
     * javaerStarter
     */
    String moduleArtifactIdHump;
    /**
     * 模块的包路径
     * 如：javaer/starter/core
     */
    Path modulePackagePath;
    /**
     * 模块的包
     * 如：java.starter.core
     */
    String modulePackage;
    /**
     * 模块的路径
     * 如：/java-starter
     */
    Path modulePath;
    /**
     * 模块的依赖
     */
    Set<DependencyDTO> dependencies;
    /**
     * 包含的modules依赖
     */
    Set<String> dependencyModules;
    /**
     * 依赖的id集合
     */
    Set<String> dependencyIdSet;
    /**
     * 项目生成的路径
     * 如：/tmp/project/{artifactId}
     */
    Path projectPath;
    /**
     * 模板生成的路径
     * 如：/tmp/template/{typeId}
     */
    Path templatePath;
    /**
     * 项目的描述
     */
    String description;
    /**
     * 属性
     */
    Map<String, String> properties;
    /**
     * 包含的模块依赖
     */
    Set<String> modules;
    /**
     * 依赖id管理
     */
    Set<DependencyDTO> dependencyManagement;
    /**
     * 启动类
     */
    String mainClass;
    /**
     * 临时变量
     */
    Map<String, String> tempValues = new HashMap<>();
}
